package br.com.virtual.base.controller.autenticacao;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.virtual.base.controller.util.VirtualMB;
import br.com.virtual.base.exceptions.VirtualValidationException;
import br.com.virtual.base.service.AutenticacaoService;
import br.com.virtual.base.uteis.CriptografiaUtil;
import br.com.virtual.cadastrar.model.Usuario;
import br.com.virtual.cadastrar.service.UsuarioService;

@ManagedBean
@ViewScoped
public class alteracaoSenhaMB extends VirtualMB {

	private static final long serialVersionUID = 1L;
	private Usuario usuarioLogado;
	private String senha;
	private String novaSenha;

	private String linkRetorno = null;

	@EJB
	private AutenticacaoService autenticacaoService;
	@EJB
	private UsuarioService usuarioService;

	@PostConstruct
	private void init() {

		if (this.autenticacaoService.hasUsuarioAutenticado())
			this.setUsuarioLogado(this.autenticacaoService.usuarioAutenticado());

		if (this.usuarioLogado == null)
			this.autenticacaoService.redirectToLogin();

		this.linkRetorno = (String) this.getFlash("retorno");
	}

	public String alterarSenha() {

		try {
			if (this.usuarioLogado.getSenha().equals(
					CriptografiaUtil.criptografa(this.senha))) {

				this.usuarioLogado.setSenha(novaSenha);
				try {
					this.usuarioService.update(this.usuarioLogado);
					addFacesMessage("Senha alterada com sucesso.",
							FacesMessage.SEVERITY_INFO, null);

					return this.linkRetorno;

				} catch (VirtualValidationException e) {
					e.printStackTrace();
				}

			} else {

				addFacesMessage("Senha incorreta, digite novamente.",
						FacesMessage.SEVERITY_ERROR, null);
				return null;

			}
		} catch (NoSuchAlgorithmException e) {

			addFacesMessage(
					"Problemas ao verificar senha, tente novamente mais tarde.",
					FacesMessage.SEVERITY_ERROR, null);
			return null;

		} catch (UnsupportedEncodingException e) {

			addFacesMessage(
					"Problemas ao verificar senha, tente novamente mais tarde.",
					FacesMessage.SEVERITY_ERROR, null);
			return null;
		}
		return this.linkRetorno;

	}

	/*
	 * GETTERS AND SETTERS
	 */

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getNovaSenha() {
		return novaSenha;
	}

	public void setNovaSenha(String novaSenha) {
		this.novaSenha = novaSenha;
	}

}
